package com.itheima.tlias84.config;

import com.itheima.tlias84.Interceptor.LoginInterceptor;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * spring配置类：一般用于拦截器配置、跨域配置 等等配置
 * 拦截器
 * 过滤器Filter和拦截器Interceptor的区别：
 * 相同的点：执行都在controller（在servlet）之前
 * 不同的点：1、技术提供--> 过滤器Filter：Servlet技术提供
 *                      拦截器Interceptor：Spring技术提供
 *         2、执行顺序--> 先执行过滤器，再执行拦截器
 *         3、拦截粒度--> 过滤器：过滤粒度粗 -> 编码转换，时间格式转换
 *                      拦截器：拦截粒度细 -> 登录认证，接口日志记录
 *
 *  注意：extends WebMvcConfigurationSupport默认有时间处理的功能
 *      如果想要使用自定义的时间格式，则应该implements WebMvcConfigurer
 */
//@Component

/**
 *配置类的特化注解：
 * @Configuration -->包含了@Component、@Documented等，默认有时间处理的功能
 */
//@Configuration
//public class WebMvcConfig extends WebMvcConfigurationSupport {
public class WebMvcConfig implements WebMvcConfigurer {
    //配置拦截器-->重写方法addInterceptors

    @Resource
    LoginInterceptor loginInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加拦截器:参数HandlerInterceptor-->注入@Resource ：LoginInterceptor-->非been不能调用been，所以该类需要@Configuration
        registry.addInterceptor(loginInterceptor)
                //添加拦截路径
                .addPathPatterns("/**")
                //排除拦截路径
                .excludePathPatterns("/login","/yml","/context","/testCons");
        //TODO 导致时间日期显示于原本的格式不一致，需要解决，
        //     方法1：注掉 @Configuration-->没有了该功能
        //     方法2：不继承WebMvcConfigurationSupport，改为实现WebMvcConfigurer
        //     方法3：在每一个日期属性上加上@JsonFormat-->麻烦

    }
}
